<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>openGauss Blog  | openGauss简化安装指导</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    
    <link rel="shortcut icon" href="https://xzx666.gitee.io/lookeng/img/favicon.ico" type="image/x-icon" />
    <link rel="apple-touch-icon" href="https://xzx666.gitee.io/lookeng/img/apple-touch-icon.png" />

    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    
    <link rel="stylesheet" href="https://xzx666.gitee.io/lookeng/css/commen.css?t=1607593672000" />
    <link rel="stylesheet" href="https://xzx666.gitee.io/lookeng/css/blog.css?t=1607593672000" />
    <link rel="stylesheet" href="https://xzx666.gitee.io/lookeng/css/mobile.css?t=1607593672000" />
    <link rel="stylesheet" href="https://xzx666.gitee.io/lookeng/css/pagination.css?t=1607593672000">
    
    <script>
      var _hmt = _hmt || [];
      (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?34e9f585f29581007941aa1698181871";
        var s = document.getElementsByTagName("script")[0]; 
        s.parentNode.insertBefore(hm, s);
      })();
    </script>
</head>
<body>
  <script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
  <script src='//unpkg.com/valine/dist/Valine.min.js'></script>






<div class="container">
    <div class="columns blog-detail">
        <div class="post_detail">
            <div class="is-child box">
                <div class="breadCrumb"><a href="\zh\">博客/</a></div>
                <div class="blog-detail-header">
                    <h1>openGauss简化安装指导</h1>
                    <div class="blog-detail-prop">
                        <img src="https://xzx666.gitee.io/lookeng/img/icon-date.png">
                        <span class="article_right_date">2020-09-28</span>
                        <img src="https://xzx666.gitee.io/lookeng/img/icon-author.png">
                        <span class="article_right_author">lijun</span>
                        <img src="https://xzx666.gitee.io/lookeng/img/icon-view.png">
                        <span id="/zh/post/lijun/%E7%AE%80%E5%8C%96%E5%AE%89%E8%A3%85%E6%8C%87%E5%AF%BC/" class="leancloud_visitors" data-flag-title="openGauss简化安装指导">
                            <i class="leancloud-visitors-count"></i>                     
                        </span>
                    </div>
                    <div class="blog-detail-tags">
                        <img src="https://xzx666.gitee.io/lookeng/img/icon-tag.png">
                        
                        <a href="https://xzx666.gitee.io/lookeng/zh/tags/opengauss%E7%AE%80%E5%8C%96%E5%AE%89%E8%A3%85%E6%8C%87%E5%AF%BC">openGauss简化安装指导</a>
                        
                    </div>
                </div>
                <div class="content blog-content">
                    

<h1 id="概述-a-name-zh-cn-topic-0276663036-a">概述<a name="ZH-CN_TOPIC_0276663036"></a></h1>

<p>本章节主要介绍采用openGauss简化安装脚本（以下简称安装脚本），一键式安装openGauss数据库所必须的系统环境及安装步骤。</p>

<h1 id="安装环境要求-a-name-zh-cn-topic-0277918211-a">安装环境要求<a name="ZH-CN_TOPIC_0277918211"></a></h1>

<h2 id="opengauss环境要求-a-name-zh-cn-topic-0277919735-a">openGauss环境要求<a name="ZH-CN_TOPIC_0277919735"></a></h2>

<p>安装openGauss的具体环境要求，请参考《openGauss安装指南》中的“2.3.1节软硬件环境要求”章节。</p>

<h2 id="安装脚本环境要求-a-name-zh-cn-topic-0277919734-a">安装脚本环境要求<a name="ZH-CN_TOPIC_0277919734"></a></h2>

<h3 id="硬件环境要求-a-name-section1362810339567-a">硬件环境要求<a name="section1362810339567"></a></h3>

<p>安装脚本对安装环境的操作系统及对应处理器架构进行了限制，目前支持的环境如<a href="#table1424418">表1 </a>所示。</p>

<p><strong>表 1</strong>  硬件环境要求</p>

<p><a name="table1424418"></a>
<table><tbody><tr id="row2298077"><td class="cellrowborder" valign="top" width="49.96%"><p id="p51926520"><a name="p51926520"></a><a name="p51926520"></a>操作系统</p>
</td>
<td class="cellrowborder" valign="top" width="50.03999999999999%"><p id="p45298596"><a name="p45298596"></a><a name="p45298596"></a>处理器架构</p>
</td>
</tr>
<tr id="row5034184"><td class="cellrowborder" valign="top" width="49.96%"><p id="p5115727"><a name="p5115727"></a><a name="p5115727"></a>openEuler</p>
</td>
<td class="cellrowborder" valign="top" width="50.03999999999999%"><p id="p11720763"><a name="p11720763"></a><a name="p11720763"></a>aarch64</p>
</td>
</tr>
<tr id="row38378011"><td class="cellrowborder" valign="top" width="49.96%"><p id="p21611161"><a name="p21611161"></a><a name="p21611161"></a>CentOS</p>
</td>
<td class="cellrowborder" valign="top" width="50.03999999999999%"><p id="p5673583"><a name="p5673583"></a><a name="p5673583"></a>x86_64</p>
</td>
</tr>
<tr id="row9783413161212"><td class="cellrowborder" valign="top" width="49.96%"><p id="p205187296121"><a name="p205187296121"></a><a name="p205187296121"></a>openEuler</p>
</td>
<td class="cellrowborder" valign="top" width="50.03999999999999%"><p id="p4785121341217"><a name="p4785121341217"></a><a name="p4785121341217"></a>x86_64</p>
</td>
</tr>
</tbody>
</table></p>

<h3 id="软件依赖要求-a-name-section6345181035619-a">软件依赖要求<a name="section6345181035619"></a></h3>

<p>安装脚本依赖于其它软件的支持，如<a href="#table23052927">表2 </a>所示。</p>

<p><strong>表 2</strong>  软件依赖要求</p>

<p><a name="table23052927"></a>
<table><tbody><tr id="row40730901"><td class="cellrowborder" valign="top" width="50%"><p id="p10868702"><a name="p10868702"></a><a name="p10868702"></a>所需软件</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p7949639"><a name="p7949639"></a><a name="p7949639"></a>建议版本</p>
</td>
</tr>
<tr id="row4437887"><td class="cellrowborder" valign="top" width="50%"><p id="p23924539"><a name="p23924539"></a><a name="p23924539"></a>firewalld</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p58839532"><a name="p58839532"></a><a name="p58839532"></a>-</p>
</td>
</tr>
<tr id="row59793748"><td class="cellrowborder" valign="top" width="50%"><p id="p11455439"><a name="p11455439"></a><a name="p11455439"></a>python</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p55475379"><a name="p55475379"></a><a name="p55475379"></a>3</p>
</td>
</tr>
</tbody>
</table></p>

<h1 id="安装opengauss-a-name-zh-cn-topic-0277918212-a">安装openGauss<a name="ZH-CN_TOPIC_0277918212"></a></h1>

<h2 id="安装前准备-a-name-zh-cn-topic-0277936930-a">安装前准备<a name="ZH-CN_TOPIC_0277936930"></a></h2>

<h3 id="导入安装脚本-a-name-section182213591271-a">导入安装脚本<a name="section182213591271"></a></h3>

<p>安装脚本包含了多个文件，其用途如<a href="#table32787233">表1 </a>所示。导入安装脚本时，建议直接导入tar包至安装环境中，随后在安装环境中进行解压，否则可能出现window与unix风格不兼容的问题。若出现此类问题，可以使用dos2unix命令对安装脚本进行格式转换。</p>

<p><strong>表 1</strong>  安装脚本清单</p>

<p><a name="table32787233"></a>
<table><tbody><tr id="row27437792"><td class="cellrowborder" valign="top" width="50%"><p id="p7868661"><a name="p7868661"></a><a name="p7868661"></a>文件名称</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p33381819"><a name="p33381819"></a><a name="p33381819"></a>用途</p>
</td>
</tr>
<tr id="row32000920"><td class="cellrowborder" valign="top" width="50%"><p id="p41937705"><a name="p41937705"></a><a name="p41937705"></a>install.sh</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p41510976"><a name="p41510976"></a><a name="p41510976"></a>简化安装主程序</p>
</td>
</tr>
<tr id="row38054464"><td class="cellrowborder" valign="top" width="50%"><p id="p62512728"><a name="p62512728"></a><a name="p62512728"></a>common.sh</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p30366184"><a name="p30366184"></a><a name="p30366184"></a>公共命令</p>
</td>
</tr>
<tr id="row4860205"><td class="cellrowborder" valign="top" width="50%"><p id="p58132325"><a name="p58132325"></a><a name="p58132325"></a>README.md</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p11097898"><a name="p11097898"></a><a name="p11097898"></a>参考文档</p>
</td>
</tr>
<tr id="row32772220"><td class="cellrowborder" valign="top" width="50%"><p id="p37304191"><a name="p37304191"></a><a name="p37304191"></a>template.xml</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p1740610"><a name="p1740610"></a><a name="p1740610"></a>xml模板</p>
</td>
</tr>
<tr id="row291714171543"><td class="cellrowborder" valign="top" width="50%"><p id="p191816171842"><a name="p191816171842"></a><a name="p191816171842"></a>finances.sql</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p17918101718419"><a name="p17918101718419"></a><a name="p17918101718419"></a>金融数据模型展示数据库</p>
</td>
</tr>
<tr id="row991912174419"><td class="cellrowborder" valign="top" width="50%"><p id="p14919417648"><a name="p14919417648"></a><a name="p14919417648"></a>school.sql</p>
</td>
<td class="cellrowborder" valign="top" width="50%"><p id="p1591961715415"><a name="p1591961715415"></a><a name="p1591961715415"></a>学校数据模型展示数据库</p>
</td>
</tr>
</tbody>
</table></p>

<h3 id="导入opengauss数据库安装包-a-name-section141819392288-a">导入openGauss数据库安装包<a name="section141819392288"></a></h3>

<p>安装脚本支持以下两种方式导入openGauss数据库安装包：</p>

<ul>
<li>手动导入</li>
</ul>

<p>在openGauss官网<a href="https://opengauss.org/zh/download.html">https://opengauss.org/zh/download.html</a>下载对应版本安装包拷贝至安装环境中，存放路径为安装脚本的上层目录。</p>

<ul>
<li>自动导入</li>
</ul>

<p>配置安装环境外网访问，并确保安装脚本上层路径不存在openGauss数据库安装包。当运行安装脚本时，会自动下载对应版本安装包进行安装。</p>

<h2 id="执行安装-a-name-zh-cn-topic-0277936931-a">执行安装<a name="ZH-CN_TOPIC_0277936931"></a></h2>

<p>使用如下命令执行安装脚本。</p>

<pre><code>sh install.sh user_name user_group host_ip host_port [install_path]
</code></pre>

<h3 id="参数说明-a-name-section1637551823711-a">参数说明<a name="section1637551823711"></a></h3>

<ul>
<li><p>user_name为openGauss数据库的安装用户。</p></li>

<li><p>user_group为openGauss数据库安装用户所属用户组。</p></li>

<li><p>host_ip为主机在后端存储网络中的IP地址（内网IP）。</p></li>

<li><p>host_port为数据库节点的基础端口号。</p></li>

<li><p>install_path为openGauss数据库安装路径，该参数为可选参数。</p></li>
</ul>

<p>以上参数的详细信息，请参考《openGauss安装指南》中的3.1节创建XML配置文件。</p>

<h3 id="注意事项-a-name-section16195182183817-a">注意事项<a name="section16195182183817"></a></h3>

<ul>
<li>不指定install_path参数时，数据库默认安装在/opt/user_name路径下。</li>
<li>无论采用何种方式导入openGauss安装包，安装脚本都会在/home/user_name/openGaussTar路径下建立本地安装包文件。该路径支持修改，请在install.sh中修改install_location参数，但是需要与安装路径install_path不同。</li>
<li>安装脚本必须在root下执行，且同一时刻只有1个安装脚本正在运行。</li>
</ul>

<h1 id="导入展示数据库-a-name-zh-cn-topic-0280480478-a">导入展示数据库<a name="ZH-CN_TOPIC_0280480478"></a></h1>

<h2 id="学校数据模型-a-name-zh-cn-topic-0280483274-a">学校数据模型<a name="ZH-CN_TOPIC_0280483274"></a></h2>

<p>假设A市B学校为了加强对学校的管理，引入了openGauss数据库。在B学校里，主要涉及的对象有学生、教师、班级、院系和课程。本文假设在B学校数据库中，教师会教授课程，学生会选修课程，院系会聘请教师，班级会组成院系，学生会组成班级。因此，根据此关系，本文给出了相应的关系模式和ER图。在运行安装脚本时，会根据用户选择安装该展示模型。</p>

<h3 id="关系模式-a-name-section445618017239-a">关系模式<a name="section445618017239"></a></h3>

<p>对于B校中的5个对象，分别建立属于每个对象的属性集合，具体属性描述如下：</p>

<ul>
<li>学生（学号，姓名，性别，出生日期，入学日期，家庭住址）</li>
<li>教师（教师编号，教师姓名，职称，性别，年龄，入职日期）</li>
<li>班级（班级编号，班级名称，班主任）</li>
<li>院系（系编号，系名称，系主任）</li>
<li>课程（课程编号，课程名称，课程类型，学分）</li>
</ul>

<p>上述属性对应的编号为：</p>

<ul>
<li>student（std_id，std_name，std_sex，std_birth，std_in，std_address）</li>
<li>teacher（tec_id，tec_name，tec_job，tec_sex，tec_age，tec_in）</li>
<li>class（cla_id，cla_name，cla_teacher）</li>
<li>school_department（depart_id，depart_name，depart_teacher）</li>
<li>course（cor_id，cor_name，cor_type，credit）</li>
</ul>

<p>对象之间的关系：</p>

<ul>
<li>一位学生可以选择多门课程，一门课程可被多名学生选择</li>
<li>一位老师可以选择多门课程，一门课程可被多名老师教授</li>
<li>一个院系可由多个班级组成</li>
<li>一个院系可聘请多名老师</li>
<li>一个班级可由多名学生组成</li>
</ul>

<h3 id="er图-a-name-section17368147172312-a">ER图<a name="section17368147172312"></a></h3>

<p><strong>图 1</strong>  学校数据模型<a name="fig1873416288536"></a><br />
<img src="../figures/学校数据模型.png" alt="" title="学校数据模型" /></p>

<h2 id="金融数据模型-a-name-zh-cn-topic-0280483275-a">金融数据模型<a name="ZH-CN_TOPIC_0280483275"></a></h2>

<p>假设A市C银行为了方便对银行数据的管理和操作，引入了openGauss数据库。针对C银行的业务，本文主要将对象分为客户、银行卡、理财产品、保险、基金和资产。因此，针对这些数据库对象，本文假设C银行的金融数据库存在着以下关系：客户可以办理银行卡，同时客户可以购买不用的银行产品，如资产，理财产品，基金和保险。那么，根据C银行的对象关系，本文给出了相应的关系模式和ER图。在运行安装脚本时，会根据用户选择安装该展示模型。</p>

<h3 id="关系模式-a-name-section2050313157256-a">关系模式<a name="section2050313157256"></a></h3>

<p>对于C银行中的6个对象，分别建立属于每个对象的属性集合，具体属性描述如下：</p>

<ul>
<li>客户（客户编号、客户名称、客户邮箱，客户身份证，客户手机号，客户登录密码）</li>
<li>银行卡（银行卡号，银行卡类型，所属客户编号）</li>
<li>理财产品（产品名称，产品编号，产品描述，购买金额，理财年限）</li>
<li>保险（保险名称，保险编号，保险金额，适用人群，保险年限，保障项目）</li>
<li>基金（基金名称，基金编号，基金类型，基金金额，风险等级，基金管理者）</li>
<li>资产（客户编号，商品编号，商品状态，商品数量，商品收益，购买时间）</li>
</ul>

<p>上述属性对应的编号为：</p>

<ul>
<li>client（c_id，c_name，c_mail，c_id_card，c_phone，c_password）</li>
<li>bank_card（b_number，b_type，b_c_id）</li>
<li>finances_product（p_name，p_id，p_description，p_amount，p_year）</li>
<li>insurance（i_name，i_id，i_amount，i_person，i_year，i_project）</li>
<li>fund（f_name，f_id，f_type，f_amount，risk_level，f_manager）</li>
<li>property（pro_c_id，pro_id，pro_status，pro_quantity，pro_income，pro_purchase_time）</li>
</ul>

<p>对象之间的关系：</p>

<ul>
<li>一个客户可以办理多张银行卡</li>
<li>一个客户可有多笔资产</li>
<li>一个客户可以购买多个理财产品，同一类理财产品可由多个客户购买</li>
<li>一个客户可以购买多个基金，同一类基金可由多个客户购买</li>
<li>一个客户可以购买多个保险，同一类保险可由多个客户购买</li>
</ul>

<h3 id="er图-a-name-section2501423152711-a">ER图<a name="section2501423152711"></a></h3>

<p><strong>图 1</strong>  金融数据模型<a name="fig148191616411"></a><br />
<img src="../figures/金融数据模型.png" alt="" title="金融数据模型" /></p>

                </div>
            </div>
            <div class="box" style="margin-top:15px;">
                <div style="font-size:14px;color:gray"><strong>【免责声明】</strong>本文仅代表作者本人观点，与本网站无关。本网站对文中陈述、观点判断保持中立，不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考，由此产生的所有法律责任均由读者本人承担。</div>
            </div>
            <div class="post-comment">
                
                  
  <link rel="stylesheet" href="https://xzx666.gitee.io/lookeng/css/custom.css" />
  <div id="vcomments" lang="zh-cn" mess="说点什么吧..."></div>

  <script type="text/javascript">
    const placeholder = document.getElementById("vcomments").getAttribute("mess"),
          lang = document.getElementById("vcomments").getAttribute("lang");
    const  langs = lang == "zh-cn" ? "zh-cn" : "en";
    new Valine({
        el: '#vcomments' ,
        appId: '6wfgavgIRqmpC3hjHqQVtFWF-gzGzoHsz',
        appKey: 'QRqrBDBB0p0YhrGe9IJ169ip',
        avatar:'mm', 
        placeholder: placeholder,
        visitor: true,
		    meta: ['nick','mail','link'],
        lang: langs
    });
  </script>
            </div>
        </div>
    </div>
</div>
<script>
    $(function (){
        var query = new AV.Query('Counter');
        query.equalTo('url', decodeURIComponent('\/zh\/post\/lijun\/%E7%AE%80%E5%8C%96%E5%AE%89%E8%A3%85%E6%8C%87%E5%AF%BC\/'));
        query.find().then(function (data) {
            if(data.length && (data[0].attributes.author === 'openGauss')){
                var counter = AV.Object.createWithoutData('Counter', data[0].id);
                counter.set('author', 'lijun');
                counter.save();
            }
        })
    })
</script>







<input id="iframeUrl" type="text" style="display: none;" value=https://xzx666.gitee.io/>




<script defer src="https://xzx666.gitee.io/lookengjs/all.js"></script>
<script src="https://xzx666.gitee.io/lookengjs/flexible.js"></script>
<script>
  const hash = window.location.search,
        pageurl = window.location.href;
  var langss = document.querySelector("html").lang === "zh-cn" ? "zh" : "en";
  console.log("hash:",hash,"pageurl:",pageurl,"ttr",pageurl.split(langss + "/")[1])

  if(!document.getElementById("vcomments")) {
    new Valine({
        appId: '6wfgavgIRqmpC3hjHqQVtFWF-gzGzoHsz',
        appKey: 'QRqrBDBB0p0YhrGe9IJ169ip',
        avatar:'mm',
        visitor: true,
		    meta: ['nick','mail','link']
    });
  }
 
  
    


    const url = document.getElementById("iframeUrl").value;

    function observe (el, options, callback) {
      var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
      var observer = new MutationObserver(callback)
      observer.observe(el, options)
    }

    var options = {
        childList: true,
        subtree: true,
        characterData: true
      }
    observe(document.body, options, (records, instance) => {
    const height = document.body.scrollHeight;
    parent.postMessage(height,url);
    })
    if(pageurl.split(langss + "/")[1]) parent.postMessage(pageurl.split(langss + "/")[1],url);
    

    if(document.querySelector("#notFound")) parent.postMessage("我404了",url);

</script>
</body>
</html>
